TEST_WRAPPER =
CHRONY_SRCDIR = ../..

CC = @CC@
CFLAGS = @CFLAGS@
CPPFLAGS = -I$(CHRONY_SRCDIR) @CPPFLAGS@
LDFLAGS = @LDFLAGS@ @LIBS@ @EXTRA_LIBS@

SHARED_OBJS = test.o

TEST_OBJS := $(sort $(patsubst %.c,%.o,$(wildcard *.c)))
TESTS := $(patsubst %.o,%.test,$(filter-out $(SHARED_OBJS),$(TEST_OBJS)))

CHRONYD_OBJS := $(patsubst %.o,$(CHRONY_SRCDIR)/%.o,$(filter-out main.o,\
		  $(filter %.o,$(shell $(MAKE) -f $(CHRONY_SRCDIR)/Makefile \
					print-chronyd-objects NODEPS=1))))

all: $(TESTS)

$(CHRONYD_OBJS): ;

%.test: %.o $(SHARED_OBJS) $(CHRONYD_OBJS)
	$(CC) $(CFLAGS) -o $@ $(filter-out $(CHRONY_SRCDIR)/$<,$^) $(LDFLAGS)

%.o: %.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<

check: $(TESTS)
	@ret=0; \
	for t in $^; do \
	  $(TEST_WRAPPER) ./$$t || ret=1; \
	done; \
	exit $$ret

clean:
	rm -f *.o *.gcda *.gcno core.* $(TESTS)
	rm -rf .deps

distclean: clean
	rm -f Makefile

.deps:
	@mkdir .deps

.deps/%.d: %.c | .deps
	@$(CC) -MM $(CPPFLAGS) -MT '$(<:%.c=%.o) $@' $< -o $@

-include $(TEST_OBJS:%.o=.deps/%.d)
